package com.yjymm.commonsdk.common.annotation;

import com.yjymm.commonsdk.common.annotation.en.VerifySource;
import com.yjymm.commonsdk.common.handler.DefaultPermissionVerifier;
import com.yjymm.commonsdk.common.handler.PermissionVerifier;
import com.yjymm.commonsdk.common.handler.RolePermissionVerifier;
import com.yjymm.commonsdk.common.handler.TokenPermissionVerifier;
import org.springframework.core.annotation.Order;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author panhaoxiong
 * @date 2021-02-07 16:37
 *
 *
 * 权限控制，通过验证后才能访问controller
 * 可通过前端参数传递，也可通过当前登录用户的信息
 * 要想此注解生效，需开启 {@link EnablePermission} 注解
 *
 *
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Permission {

    /**
     * 验证来源参数来源
     * @return
     */
    VerifySource verifySource() default VerifySource.REQUEST;

    String propertyName() default "";

    String propertyValue() default "";

    /**
     * 角色验证，具体验证逻辑自定义
     * @see com.yjymm.commonsdk.common.handler.PermissionVerifier
     * @return
     */
    Class<? extends PermissionVerifier> verifier() default DefaultPermissionVerifier.class;

}
